#ifndef OPENHITLS_KAE_RSA_LOCAL_H
#define OPENHITLS_KAE_RSA_LOCAL_H

#include <bsl_errno.h>
#include <bsl_params.h>
#include <crypt_algid.h>
#include <crypt_errno.h>
#include <crypt_rsa.h>

#include "kaev1_rsa.h"

int32_t RSA_CheckBitsLength(uint32_t bits);

int32_t IsRSASetParaVaild(const KAE_RSA_Ctx *ctx, const RSA_Para *para);

RSA_Para *KAE_RSA_NewPara(const BSL_Param *para);

KAE_RSA_PubKey *KAE_RSA_NewPubKey(uint32_t bits);

KAE_RSA_PrvKey *KAE_RSA_NewPrvKey(uint32_t bits);

void KAE_RSA_FreePara(RSA_Para *para);

void KAE_RSA_FreePubKey(KAE_RSA_PubKey *pubKey);

void KAE_RSA_FreePrvKey(KAE_RSA_PrvKey *prvKey);

int32_t Rsa_Fill_PubKey(KAE_RSA_Ctx *ctx);

int32_t KAE_RSA_Gen(KAE_RSA_Ctx *ctx);

uint32_t KAE_RSA_GetBits(const KAE_RSA_Ctx *ctx);

uint32_t KAE_RSA_GetSignLen(const KAE_RSA_Ctx *ctx);

int32_t KAE_RSA_GetSecBits(const KAE_RSA_Ctx *ctx);

int32_t PssPad(KAE_RSA_Ctx *ctx, const uint8_t *input, uint32_t inputLen, uint8_t *out, uint32_t outLen);

int32_t RSA_SetPkcs1Oaep(KAE_RSA_Ctx *ctx, const uint8_t *in, uint32_t inLen, uint8_t *pad, uint32_t padLen);
#endif